home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’97 / Warrior’s Progress / source code / Source / Libraries / Application / KeyMessageMaker.cp < prev    next >
Encoding:
Text File  |  1997-06-28  |  5.8 KB  |  205 lines  |  [TEXT/CWIE]

  1. // KeyMessageMaker.cp
  2.  
  3. #ifndef KeyMessageMaker_h
  4. #include "KeyMessageMaker.h"
  5. #endif
  6. #ifndef TypingMessage_h
  7. #include "TypingMessage.h"
  8. #endif
  9. #ifndef FunctionKeyMessage_h
  10. #include "FunctionKeyMessage.h"
  11. #endif
  12. #ifndef CommandKeyMessage_h
  13. #include "CommandKeyMessage.h"
  14. #endif
  15. #ifndef SpecialKeyMessage_h
  16. #include "SpecialKeyMessage.h"
  17. #endif
  18. #ifndef SingleAllocator_h
  19. #include "SingleAllocator.h"
  20. #endif
  21. #ifndef VerticalArrows_h
  22. #include "VerticalArrows.h"
  23. #endif
  24. #ifndef Undoing_h
  25. #include "Undoing.h"
  26. #endif
  27. #ifndef Typing_h
  28. #include "Typing.h"
  29. #endif
  30. #ifndef TabKeys_h
  31. #include "TabKeys.h"
  32. #endif
  33. #ifndef Scrolling_h
  34. #include "Scrolling.h"
  35. #endif
  36. #ifndef ReturnKeys_h
  37. #include "ReturnKeys.h"
  38. #endif
  39. #ifndef HorizontalArrows_h
  40. #include "HorizontalArrows.h"
  41. #endif
  42. #ifndef HelpKeys_h
  43. #include "HelpKeys.h"
  44. #endif
  45. #ifndef FunctionKeys_h
  46. #include "FunctionKeys.h"
  47. #endif
  48. #ifndef EscapeKeys_h
  49. #include "EscapeKeys.h"
  50. #endif
  51. #ifndef Editing_h
  52. #include "Editing.h"
  53. #endif
  54. #ifndef DeleteKeys_h
  55. #include "DeleteKeys.h"
  56. #endif
  57. #ifndef StopKeys_h
  58. #include "StopKeys.h"
  59. #endif
  60. #ifndef KeyEvent_h
  61. #include "KeyEvent.h"
  62. #endif
  63.  
  64. #define MaxSize2(A,B)                    ( (sizeof(A)>sizeof(B)) ? sizeof(A) : sizeof(B) )
  65. #define MaxSize4(A,B,C,D)                ( (MaxSize2(A,B)>MaxSize2(C,D) ? MaxSize2(A,B) : MaxSize2(C,D) ) )
  66. #define MaxSize8(A,B,C,D,E,F,G,H)    ( (MaxSize4(A,B,C,D)>MaxSize4(E,F,G,H) ? MaxSize4(A,B,C,D) : MaxSize4(E,F,G,H) ) )
  67. #define MaxSize16(A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q)    \
  68.     ( (MaxSize8(A,B,C,D,E,F,G,H)>MaxSize8(I,J,K,L,M,N,P,Q) ? MaxSize8(A,B,C,D,E,F,G,H) : MaxSize8(I,J,K,L,M,N,P,Q) ) )
  69.  
  70. #define maxMessageSize    MaxSize16( TypingMessage, FunctionKeyMessage, CommandKeyMessage, \
  71.                                               SpecialKeyMessage<EscapeKeys>, SpecialKeyMessage<Editing>, \
  72.                                               SpecialKeyMessage<Scrolling>, SpecialKeyMessage<StopKeys>, \
  73.                                               SpecialKeyMessage<TabKeys>, SpecialKeyMessage<ReturnKeys>, \
  74.                                               SpecialKeyMessage<DeleteKeys>, SpecialKeyMessage<HelpKeys>, \
  75.                                               SpecialKeyMessage<Undoing>, SpecialKeyMessage<VerticalArrows>, \
  76.                                               SpecialKeyMessage<HorizontalArrows>, \
  77.                                               TypingMessage, TypingMessage )
  78.  
  79. KeyMessage& KeyMessageMaker::MakeKeyMessage( const KeyEvent& event )
  80.   {
  81.     static SingleAllocator< KeyMessage, maxMessageSize > storage;
  82.     storage.DeleteAll();
  83.     
  84.     if ( !event.Key().Special() )
  85.       {
  86.         if ( event.Command() )
  87.             return *new(storage) CommandKeyMessage( event.Key() );
  88.          else
  89.             return *new(storage) TypingMessage( event.Key() );
  90.       }
  91.     
  92.     switch ( event.Key().Code() )
  93.       {
  94.         case Key::returnKey:
  95.             return *new(storage) SpecialKeyMessage< ReturnKeys >( &ReturnKeys::ReturnKey );
  96.         
  97.         case Key::tabKey:
  98.             return *new(storage) SpecialKeyMessage< TabKeys >( event.Shift()
  99.                                                                                 ? &TabKeys::TabBackward
  100.                                                                                 : &TabKeys::TabForward );
  101.         
  102.         case Key::deleteKey:
  103.             return *new(storage) SpecialKeyMessage< DeleteKeys >( event.Shift()
  104.                                                                                     ? &DeleteKeys::DeleteForward
  105.                                                                                     : &DeleteKeys::DeleteBackward );
  106.         
  107.         case Key::escapekey:
  108.             return *new(storage) SpecialKeyMessage< EscapeKeys >( &EscapeKeys::EscapeKey );
  109.  
  110.         case Key::clearKey:
  111.             return *new(storage) SpecialKeyMessage< Editing >( &Editing::Clear );
  112.  
  113.         case Key::enterKey:
  114.             return *new(storage) SpecialKeyMessage< ReturnKeys >( &ReturnKeys::EnterKey );
  115.  
  116.         case Key::function5:
  117.             return *new(storage) FunctionKeyMessage( 5 );
  118.  
  119.         case Key::function6:
  120.             return *new(storage) FunctionKeyMessage( 6 );
  121.  
  122.         case Key::function7:
  123.             return *new(storage) FunctionKeyMessage( 7 );
  124.  
  125.         case Key::function3:
  126.             return *new(storage) SpecialKeyMessage< Editing >( &Editing::Copy );
  127.  
  128.         case Key::function8:
  129.             return *new(storage) FunctionKeyMessage( 8 );
  130.  
  131.         case Key::function9:
  132.             return *new(storage) FunctionKeyMessage( 9 );
  133.  
  134.         case Key::function11:
  135.             return *new(storage) FunctionKeyMessage( 11 );
  136.  
  137.         case Key::function13:
  138.             return *new(storage) FunctionKeyMessage( 13 );
  139.  
  140.         case Key::function14:
  141.             return *new(storage) FunctionKeyMessage( 14 );
  142.  
  143.         case Key::function10:
  144.             return *new(storage) FunctionKeyMessage( 10 );
  145.  
  146.         case Key::function12:
  147.             return *new(storage) FunctionKeyMessage( 12 );
  148.  
  149.         case Key::function15:
  150.             return *new(storage) FunctionKeyMessage( 15 );
  151.  
  152.         case Key::helpKey:
  153.             return *new(storage) SpecialKeyMessage< HelpKeys >( &HelpKeys::HelpKey );
  154.  
  155.         case Key::homeKey:
  156.             return *new(storage) SpecialKeyMessage< Scrolling >( &Scrolling::Home );
  157.  
  158.         case Key::pageUpKey:
  159.             return *new(storage) SpecialKeyMessage< Scrolling >( &Scrolling::PageUp );
  160.  
  161.         case Key::forwardDeleteKey:
  162.             return *new(storage) SpecialKeyMessage< DeleteKeys >( event.Shift()
  163.                                                                                     ? &DeleteKeys::DeleteBackward
  164.                                                                                     : &DeleteKeys::DeleteForward );
  165.  
  166.         case Key::function4:
  167.             return *new(storage) SpecialKeyMessage< Editing >( &Editing::Paste );
  168.  
  169.         case Key::endKey:
  170.             return*new(storage) SpecialKeyMessage< Scrolling >( &Scrolling::End );
  171.  
  172.         case Key::function2:
  173.             return *new(storage) SpecialKeyMessage< Editing >( &Editing::Cut );
  174.  
  175.         case Key::pageDownKey:
  176.             return *new(storage) SpecialKeyMessage< Scrolling >( &Scrolling::PageDown );
  177.  
  178.         case Key::function1:
  179.             return *new(storage) SpecialKeyMessage< Undoing >( &Undoing::UndoOrRedo );
  180.  
  181.         case Key::leftArrow:
  182.             return *new(storage) SpecialKeyMessage< HorizontalArrows >( &HorizontalArrows::LeftArrow );
  183.  
  184.         case Key::rightArrow:
  185.             return *new(storage) SpecialKeyMessage< HorizontalArrows >( &HorizontalArrows::RightArrow );
  186.  
  187.         case Key::downArrow:
  188.             return *new(storage) SpecialKeyMessage< VerticalArrows >( &VerticalArrows::DownArrow );
  189.  
  190.         case Key::upArrow:
  191.             return *new(storage) SpecialKeyMessage< VerticalArrows >( &VerticalArrows::UpArrow );
  192.  
  193.         case Key::power:
  194.             Assert( 0 );
  195.             break;
  196.         
  197.         case Key::stopKey:
  198.             return *new(storage) SpecialKeyMessage< StopKeys >( &StopKeys::StopKey );
  199.             break;
  200.       }
  201.     
  202.     Assert( 0 );
  203.     return *new(storage) TypingMessage( event.Key() );
  204.   }
  205.